package com.fuhaixing.modules.web;

import com.fuhaixing.modules.entity.Currency;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**解析中行页面数据
 * @author FHX
 * @Date 2021-02-25  11:54
 * @describe RobotCurrencyController
 */
@RestController
public class RobotCurrencyController {

    @RequestMapping("/robotCurrency")
    public List<Currency> getRobot(String erectDate, String nothing, String pjname, int pageSize, String fileType) {
        StringBuffer data = new StringBuffer();
        List<Currency> currencyList = new ArrayList<Currency>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        for (int i = 0; i < pageSize; i++) {
            // 因为要爬取分页信息，就通过循环重新加载网页来来实现，一般网页的分页URL都是有规律的，一般就是在后面的数字加1得到，所以利用这个规律来实现分页爬取数据的效果
            // 网页地址
            String url = "https://srh.bankofchina.com/search/whpj/search_cn.jsp?erectDate=" + erectDate + "&nothing=" + nothing + "&pjname=" +pjname + "&page=" + (i + 1);

            try {
                // 根据URL获取当前URL界面的doc对象，里面存储着界面的所有元素，类似于BOM
                Document doc = Jsoup.connect(url).get();
 		 /*这个select方法可以对Elements集合类型对象，或者Element单个类型元素对象来使用
 	  	   select方法的其中一个作用就是找到在括号里传入要找标签的名字，他就会返回调用这个select方法的标签对象所有的和要查
 		   找标签名字一样的标签对象的集合，注意这里返回的是Elements集合对象
 	   	   后面那个last()方法和first()方法，是对集合操作的方法返回的是Element元素对象,first()就是返回元素集合的第一个元素last()
 		   就是返回的最后一个*/
                // 获取第一个表格
                Element table = doc.select("table").last();
                // System.out.println(element);
                Element tbody = table.select("tbody").first();
                Elements trs = tbody.select("tr");
                // 这个就是遍历元素集合的每一个元素，来查找想要的标签对象
                for (Element tr : trs) {
                    Elements tds = tr.select("td");
                    int j = 0;
                    Currency currency = new Currency();
                    for (Element td : tds) {
                        if(j == 0){
                            currency.setCurrencyName(td.text());
                        }else if(j == 1){
                            currency.setSpotBuyPrice(td.text());
                        }else if(j == 2){
                            currency.setCashBuyPrice(td.text());
                        }else if(j == 3){
                            currency.setSpotSellPrice(td.text());
                        }else if(j == 4){
                            currency.setCashSellPrice(td.text());
                        }else if(j == 5){
                            currency.setDiscountPrice(td.text());
                        }else if(j == 6){
                            currency.setReleaseTime(td.text());
                        }
                        j++;
                        // text()方法局势返回调用标签元素中的文本内容，返回的是String类型
                        data.append(td.text() + "\t");
                    }
                    if(currency.getCurrencyName() != null){
                        currencyList.add(currency);
                    }
                    data.append("\n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        currencyList = currencyList.stream().filter(Objects::nonNull).collect(Collectors.toList());
        return currencyList;
    }

}
